package model;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.GregorianCalendar;

/**
 * 
 * @author David
 * 
 */

public class PwVergessenSchnittstelle {
	/**
	 * Gibt einen Link nach seinem random-String zurück.
	 * 
	 * @param random
	 *            der Zufalls-String
	 * @return der Link mit gegebenem random-String; falls nicht vorhanden
	 *         <code>null</code>
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	static public PwZuruecksetzenLink getLink(String random)
			throws ClassNotFoundException, SQLException {
		ResultSet rs = DatenbankSchnittstelle.getInstance().select(
				"passwortlink", "random='" + random + "'");
		rs.beforeFirst();
		if (rs.next()) {
			PwZuruecksetzenLink l = new PwZuruecksetzenLink();
			l.random = rs.getString("random");
			l.benutzerId = Integer.parseInt(rs.getString("benutzerid"));
			l.erstelltzeit = Long.parseLong(rs.getString("erstellungszeit"));
			return l;
		}
		return null;
	}

	/**
	 * Gibt einen Link für einen Benutzer zurück.
	 * 
	 * @param benutzerId
	 *            die Benutzer-ID
	 * @return der Link für den Benutzer mit gegebener Benutzer-ID; falls nicht
	 *         vorhanden <code>null</code>
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	static public PwZuruecksetzenLink getLink(int benutzerId)
			throws ClassNotFoundException, SQLException {
		ResultSet rs = DatenbankSchnittstelle.getInstance().select(
				"passwortlink", "benutzerid='" + benutzerId + "'");
		rs.beforeFirst();
		if (rs.next()) {
			PwZuruecksetzenLink l = new PwZuruecksetzenLink();
			l.random = rs.getString("random");
			l.benutzerId = Integer.parseInt(rs.getString("benutzerid"));
			l.erstelltzeit = Long.parseLong(rs.getString("erstellungszeit"));
			return l;
		}
		return null;
	}

	/**
	 * Setzen eines links
	 * 
	 * @param link
	 *            der link
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 */
	static public void setLink(PwZuruecksetzenLink link) throws SQLException,
			ClassNotFoundException {
		String[][] db_werte = new String[2][3];
		// spaltennamen
		db_werte[0][0] = "random";
		db_werte[0][1] = "benutzerid";
		db_werte[0][2] = "erstellungszeit";
		// werte
		db_werte[1][0] = "" + link.random;
		db_werte[1][1] = "" + link.benutzerId;
		db_werte[1][2] = "" + link.erstelltzeit;
		// ebene in die datenbank eintragen
		DatenbankSchnittstelle.getInstance().insert("passwortlink", db_werte);
	}

	/**
	 * Löschen eines Links mit übergebenem random-String.
	 * 
	 * @param random
	 *            der random-String eines Links
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 */
	static public void linkLoeschen(String random) throws SQLException,
			ClassNotFoundException {
		DatenbankSchnittstelle.getInstance().del("passwortlink",
				"random='" + random + "'");
	}

	/**
	 * Löschen der abgelaufenen Links.
	 * 
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	static public void abgelaufeneLinksLoeschen()
			throws ClassNotFoundException, SQLException { // löscht jeden Link
															// der älter als 24
															// Stunden ist
		DatenbankSchnittstelle
				.getInstance()
				.del("passwortlink",
						"erstellungszeit<'"
								+ ((new GregorianCalendar()).getTimeInMillis() - (24 * 3600 * 1000))
								+ "'");
	}
}
